
import router, { RAMrouter } from '@/router'
import store from '@/store'
import getPageTitle from '@/utils/get-page-title'
// 添加前置路由权限

// 配置一个假的进度条
import NProgress from 'nprogress' // progress bar
import 'nprogress/nprogress.css' // progress bar style
// 如何开启假的进度条 NProgress.start()   什么时候开启在前置路由里面开启在后置路由里面关闭
// 如何关闭假的进度条  NProgress.done()    什么时候关闭,在页面加载完毕在 后置路由里面进行关闭
router.beforeEach(async(to, from, next) => {
  /*
  console.log('去哪里', to)
  console.log('重哪里来', from)
  next()// 放行
   */
  // 动态设置  title 标题
  document.title = getPageTitle(to.meta.title)
  // 开启假的进度条
  NProgress.start()
  const token = store.state.user.token
  // 设置白名单路径
  const url = ['/login', '/404']
  if (token) {
    // 已经登陆了
    // 只要有token就证明登陆了    用户一登录就调用 vuex中 actions的函数进行发送axios请求获取用户的数据   然后把得到的用户数据存储vuex中

    // console.log('ok')
    if (to.path === '/login') {
      console.log('你已经登录了,不用去登录页了')
      next('/') // 配置了跳转路径的页面需要手动关闭进度条
      // 关闭假的进度条
      NProgress.done()
    } else {
      // 用来判断是否已经获取了员工数据 如果获取了就不发送请求 没有获取就发请求获取员工数据
      if (!store.state.user.userInfo.id) {
        // 进入这里面就证明  员工数据还没有获取
        // 接收该函数返回值 员工权限
        const menus = await store.dispatch('user/axiosInfo')
        console.log(menus, 'menus') // 获取的员工权限
        const asyncRouter = RAMrouter
        console.log('asyncRouter为遍历的动态路由', asyncRouter) // 所有的动态路由得到

        // 根据权限遍历后的路由
        const filterRouter = asyncRouter.filter(router => { return menus.includes(router.children[0].name) })
        console.log('filterRouter遍历后的动态路由', filterRouter)
        // router.addRoutes() 可以动态添加路由
        router.addRoutes(filterRouter)
        // 吧404 页面页动态添加到最后 因为有先后顺序关系 不添加最后会导致404 问题
        router.addRoutes([{ path: '*', redirect: '/404', hidden: true }])
        // 此时会出现白屏问题是因为动态添加路由是异步的,但是在添加路由前页面就会去访问此时 动态路由还未加载完毕
        // 吧遍历后的路由添加 vuex
        store.commit('addRouter/addRoutersVuex', filterRouter)
        // 解决白屏 意思是等动态路由加载完毕 再次进去访问页面
        next({ ...to, replace: true })
      } else {
        console.log('已经登陆了放行')
        next()
      }
    }
  } else {
    // 没有登录
    // includes() 判断有或没有     返回值 false||true
    if (url.includes(to.path)) {
      console.log('你虽然没有登录但是,所在区域是白名单区域')
      next()
    } else {
      console.log('没登录,还乱跑,赶快去登录')
      next('/login')// 配置了跳转路径的页面需要手动关闭进度条
      // 关闭假的进度条
      NProgress.done()
    }
  }
})
// 配置后置路由权限
router.afterEach(() => {
  // 关闭假的进度条
  NProgress.done()
})
